﻿Imports System.Data
Imports CrystalDecisions.Shared
Imports System.Data.OleDb
Imports System
Imports System.Globalization
Partial Class Interfaz_ModuloPlanificacion_frmProgramar
    Inherits System.Web.UI.Page
    Dim CL As Logica.ModuloPlanificacion.ControladorLogica
    Dim dtDatosPlanificacion As New DataTable
    Dim dtDatosPlanificacion2 As New DataTable

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        CL = Logica.ModuloPlanificacion.ControladorLogica.getInstance

        If CL.visibilidadesFormsInternos("Planificacion", Session("user").ToString) = False Then
            Me.Mensaje("Usted NO cuenta con los permisos necesarios para ingresar a esta sección. Para solucionar este problema favor comunicarse con el administrador de sistemas")
            Response.Redirect("Index.aspx")
        End If

        If Not Page.IsPostBack Then
            Try
                llenarTrabajadores()
                llenarEspecialidad()
            Catch ex As Exception
                Throw ex
            End Try
        Else
        End If

    End Sub

#Region "Utilidades"

    Public Sub Mensaje(ByVal msg As String)
        Dim alertScript As String = "<script language=JavaScript runat=server>"
        alertScript &= "alert('" & msg & "');"
        alertScript &= "</script>"
        ClientScript.RegisterClientScriptBlock(Page.GetType(), "clientScrip", alertScript)
    End Sub

#End Region

#Region "Funciones"

    Public Sub llenarTrabajadores()
        Dim emp As ArrayList = Logica.ModuloRHH.ControladorLogica.getInstance.obtenerEmpleado
        If emp.Count > 0 Then
            For i As Integer = 0 To emp.Count - 1
                Dim empleado As Empleado = emp.Item(i)
                Dim lista As ListItem = New ListItem(empleado.Rut & " - " & empleado.Nombre & " " & empleado.Apellido, empleado.Rut)
                Me.DdlTrabajadorppt.Items.Add(lista)
            Next
        Else
            Me.DdlTrabajadorppt.Items.Clear()
        End If
    End Sub

    Public Sub llenarTrabajadoresPorActividad(ByVal criterio As String)
        Dim emp As ArrayList = Logica.ModuloRHH.ControladorLogica.getInstance.obtenerEmpleado
        Dim esp As ArrayList = Logica.ModuloRHH.ControladorLogica.getInstance.obtenerEmpleadoEspecialidad(criterio, 2)
        If emp.Count > 0 Then
            DdlTrabajadorActividad.Items.Clear()
            For i As Integer = 0 To esp.Count - 1
                For j As Integer = 0 To emp.Count - 1
                    Dim profempleado As profesionempleado = esp.Item(i)
                    Dim empleado As Empleado = emp.Item(j)

                    If profempleado.Rut = empleado.Rut Then
                        Dim lista As ListItem = New ListItem(empleado.Nombre & " " & empleado.Apellido & " / " & profempleado.Prioridad, empleado.Rut)
                        Me.DdlTrabajadorActividad.Items.Add(lista)
                    End If
                Next
            Next
        Else
            Me.DdlTrabajadorppt.Items.Clear()
        End If
    End Sub

    Public Sub llenarEspecialidad()
        Dim esp As ArrayList = Logica.ModuloRHH.ControladorLogica.getInstance.obtenerEmpleadoEspecialidad(Me.DdlTrabajadorppt.SelectedValue, 1)
        If esp.Count > 0 Then
            Me.Ddlespecialidadppt.Items.Clear()
            For i As Integer = 0 To esp.Count - 1
                Dim ee As profesionempleado = esp.Item(i)
                Dim lis As ListItem = New ListItem(ee.Prioridad & ".- " & DirectCast(CL.ObtenerEstaciones(ee.FkEstacion, 2).Item(0), Estacion).Estacion, ee.FkEstacion)
                Me.Ddlespecialidadppt.Items.Add(lis)
            Next
        Else
            Me.Ddlespecialidadppt.Items.Clear()
        End If
    End Sub

    Public Sub llenargrid()
        dtDatosPlanificacion.Clear()
        dtDatosPlanificacion.Columns.Add(New DataColumn("ID"))
        dtDatosPlanificacion.Columns.Add(New DataColumn("MARCA"))
        dtDatosPlanificacion.Columns.Add(New DataColumn("DESCRIPCION"))
        dtDatosPlanificacion.Columns.Add(New DataColumn("ESTACIONES"))
        dtDatosPlanificacion.Columns.Add(New DataColumn("PLANO"))
        dtDatosPlanificacion.Columns.Add(New DataColumn("TIEMPO"))
        dtDatosPlanificacion.Columns.Add(New DataColumn("OBSERVACION"))
        dtDatosPlanificacion.Columns.Add(New DataColumn("TOTAL"))
        dtDatosPlanificacion.Columns.Add(New DataColumn("ASIGNADOS"))

        Dim array As ArrayList = CL.ObtenerPlanificacionM3(Me.Ddlespecialidadppt.SelectedValue, 4)
        Dim array2 As ArrayList = CL.ObtenerPlanificacionM3(Me.Ddlespecialidadppt.SelectedValue, 5)
        For i As Integer = 0 To array2.Count - 1
            array.Add(array2.Item(i))
        Next

        If array.Count > 0 Then

            For i As Integer = 0 To array.Count - 1
                Dim drDatos As DataRow = dtDatosPlanificacion.NewRow
                Dim pm3 As Planificacion_M3 = array.Item(i)
                drDatos.Item("ID") = pm3.id
                drDatos.Item("ESTACIONES") = DirectCast(CL.ObtenerEstaciones(pm3.Estacion, 2).Item(0), Estacion).Estacion
                drDatos.Item("TIEMPO") = pm3.Tiempo & " min"
                drDatos.Item("OBSERVACION") = pm3.Observacion
                drDatos.Item("TOTAL") = pm3.CantidadTotal
                Try
                    drDatos.Item("ASIGNADOS") = DirectCast(CL.ObtenerPlanificacionProgramarSumaTotal(pm3.id).Item(0), Programar).Cantidad_asignados
                Catch ex As Exception
                    drDatos.Item("ASIGNADOS") = 0
                End Try



                Dim pm2 As Planificacion_M2 = CL.ObtenerPlanificacionM2(pm3.Fk_plani_m2, 2).Item(0)
                Dim pm1 As Planificacion_M1 = CL.ObtenerPlanificacionM1(pm2.Fk_plani_m1, 2).Item(0)

                drDatos.Item("MARCA") = pm1.marca & " / " & pm2.marca
                drDatos.Item("DESCRIPCION") = pm2.Descripcion
                drDatos.Item("PLANO") = pm1.Plano

                dtDatosPlanificacion.Rows.Add(drDatos)

            Next
            Me.GvProgramacionTrabajador.DataSource = dtDatosPlanificacion
            Me.GvProgramacionTrabajador.DataBind()

        Else
            dtDatosPlanificacion.Clear()
            Me.GvProgramacionTrabajador.DataSource = dtDatosPlanificacion
            Me.GvProgramacionTrabajador.DataBind()
            Me.LblMensaje.Text = "La Estacion Seleccionada NO cuenta con Tareas Pendientes"
            Me.LblMensaje.ForeColor = Drawing.Color.Red
        End If
    End Sub

    Public Sub llenargrid2()
        dtDatosPlanificacion2.Clear()
        dtDatosPlanificacion2.Columns.Add(New DataColumn("ID"))
        dtDatosPlanificacion2.Columns.Add(New DataColumn("MARCA"))
        dtDatosPlanificacion2.Columns.Add(New DataColumn("DESCRIPCION"))
        dtDatosPlanificacion2.Columns.Add(New DataColumn("ESTACIONES"))
        dtDatosPlanificacion2.Columns.Add(New DataColumn("PLANO"))
        dtDatosPlanificacion2.Columns.Add(New DataColumn("TIEMPO"))
        dtDatosPlanificacion2.Columns.Add(New DataColumn("OBSERVACION"))
        dtDatosPlanificacion2.Columns.Add(New DataColumn("TOTAL"))
        dtDatosPlanificacion2.Columns.Add(New DataColumn("ASIGNADOS"))

        Dim array As ArrayList = CL.ObtenerPlanificacionM3("", 6)
        Dim array2 As ArrayList = CL.ObtenerPlanificacionM3("", 7)
        For i As Integer = 0 To array2.Count - 1
            array.Add(array2.Item(i))
        Next

        If array.Count > 0 Then

            For i As Integer = 0 To array.Count - 1
                Dim drDatos As DataRow = dtDatosPlanificacion2.NewRow
                Dim pm3 As Planificacion_M3 = array.Item(i)
                drDatos.Item("ID") = pm3.id
                drDatos.Item("ESTACIONES") = DirectCast(CL.ObtenerEstaciones(pm3.Estacion, 2).Item(0), Estacion).Estacion
                drDatos.Item("TIEMPO") = pm3.Tiempo & " min"
                drDatos.Item("OBSERVACION") = pm3.Observacion
                drDatos.Item("TOTAL") = pm3.CantidadTotal

                Try
                    drDatos.Item("ASIGNADOS") = DirectCast(CL.ObtenerPlanificacionProgramarSumaTotal(pm3.id).Item(0), Programar).Cantidad_asignados
                Catch ex As Exception
                    drDatos.Item("ASIGNADOS") = 0
                End Try


                Dim pm2 As Planificacion_M2 = CL.ObtenerPlanificacionM2(pm3.Fk_plani_m2, 2).Item(0)
                Dim pm1 As Planificacion_M1 = CL.ObtenerPlanificacionM1(pm2.Fk_plani_m1, 2).Item(0)

                drDatos.Item("MARCA") = pm1.marca & " / " & pm2.marca
                drDatos.Item("DESCRIPCION") = pm2.Descripcion
                drDatos.Item("PLANO") = pm1.Plano

                dtDatosPlanificacion2.Rows.Add(drDatos)

            Next
            Me.GvProgramacionActividad.DataSource = dtDatosPlanificacion2
            Me.GvProgramacionActividad.DataBind()
            Me.LblMensaje.Text = "Los Datos Han Sida Cargados Exitosamente."
            Me.LblMensaje.ForeColor = Drawing.Color.Blue
        Else
            dtDatosPlanificacion.Clear()
            Me.GvProgramacionActividad.DataSource = dtDatosPlanificacion2
            Me.GvProgramacionActividad.DataBind()
            Me.LblMensaje.Text = "La Estacion Seleccionada NO cuenta con Tareas Pendientes"
            Me.LblMensaje.ForeColor = Drawing.Color.Red
        End If
    End Sub

    Public Function programar(ByVal grid As GridView, ByVal label As Label, ByVal ControlCheckBox As String, ByVal ControlTexBox As String) As Boolean

        'metodo check tabas
        Dim filaGrid As GridViewRow

        With grid
            ' Recorrer las filas del dataGridView  
            For fila As Integer = 0 To .Rows.Count - 1
                filaGrid = grid.Rows(fila)

                ' Recorrer la cantidad de columnas que contiene el dataGridView  
                Dim cb As CheckBox = filaGrid.FindControl(ControlCheckBox)
                Dim cantidad As TextBox = filaGrid.FindControl(ControlTexBox)

                If cb.Checked = True Then
                    Try
                        If CInt(cantidad.Text) <= CInt(filaGrid.Cells(7).Text) And (CInt(cantidad.Text) + CInt(filaGrid.Cells(8).Text)) <= CInt(filaGrid.Cells(7).Text) Then
                            Dim pm3 As Planificacion_M3 = CL.ObtenerPlanificacionM3(filaGrid.Cells(0).Text, 2).Item(0)
                            Dim pro As Programar = New Programar(pm3.id, "-", "-", System.DateTime.Now, cantidad.Text, 0, Me.DdlTrabajadorppt.SelectedValue)
                            CL.ingresarProgramacion(pro)
                            label.Text = "La Tarea Ha Sido Programada Exitosamente"
                            label.ForeColor = Drawing.Color.Blue
                        Else
                            label.Text = "El Numero Asignado Excede el Limite Permitido"
                            label.ForeColor = Drawing.Color.Red
                            Return False
                        End If
                    Catch ex As Exception
                        label.Text = "Asegurese de ingresar solo numeros en cantidad"
                        label.ForeColor = Drawing.Color.Red
                        Return False
                    End Try

                End If
            Next fila
        End With
        Return True
    End Function

    Public Sub verificarAsignacionTrabajador()

    End Sub

#End Region

#Region "Eventos"

    Protected Sub RadioButtonList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles RadioButtonList1.SelectedIndexChanged
        If Me.RadioButtonList1.SelectedValue = 1 Then
            Me.PnlProgramarTrabajador.Visible = True
            Me.PnlProgramarActividad.Visible = False
            llenargrid()
        End If
        If Me.RadioButtonList1.SelectedValue = 2 Then
            Me.PnlProgramarActividad.Visible = True
            Me.PnlProgramarTrabajador.Visible = False
            llenargrid2()
        End If

    End Sub

    Protected Sub DdlTrabajadorppt_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DdlTrabajadorppt.SelectedIndexChanged
        llenarEspecialidad()
        dtDatosPlanificacion.Clear()
        Me.GvProgramacionTrabajador.DataSource = dtDatosPlanificacion
        Me.GvProgramacionTrabajador.DataBind()
        llenargrid()
    End Sub

    Protected Sub Ddlespecialidadppt_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Ddlespecialidadppt.SelectedIndexChanged
        llenargrid()
    End Sub

    Protected Sub cbProgramarActividad_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)
        Dim cb As CheckBox = DirectCast(sender, CheckBox)
        Dim row As GridViewRow = DirectCast(cb.NamingContainer, GridViewRow)

        Dim filaGrid As GridViewRow
        With Me.GvProgramacionActividad
            ' Recorrer las filas del dataGridView  
            For fila As Integer = 0 To .Rows.Count - 1
                filaGrid = GvProgramacionActividad.Rows(fila)
                If filaGrid.Cells(0).Text <> row.Cells(0).Text Then
                    Dim cb2 As CheckBox = filaGrid.FindControl("cbProgramarActividad")
                    If cb2.Checked = True Then cb2.Checked = False
                End If
            Next
        End With

        If cb.Checked = True Then
            Me.DdlTrabajadorActividad.Visible = True
            Me.lblinfoDdlProgramarPorActividad.Visible = True
            llenarTrabajadoresPorActividad(row.Cells(3).Text)
            If Me.DdlTrabajadorActividad.Items.Count > 0 Then
                Me.LblMensajeActividad.Text = "Los Trabajadores Han sido actualizados"
                Me.LblMensajeActividad.ForeColor = Drawing.Color.Blue
            Else
                Me.DdlTrabajadorActividad.Items.Clear()
                Me.DdlTrabajadorActividad.Visible = False
                Me.lblinfoDdlProgramarPorActividad.Visible = False
                Me.LblMensajeActividad.Text = "La tarea No cuenta con especialistas en el Sistema"
                Me.LblMensajeActividad.ForeColor = Drawing.Color.Red
            End If
        Else
            Me.DdlTrabajadorActividad.Items.Clear()
            Me.DdlTrabajadorActividad.Visible = False
            Me.lblinfoDdlProgramarPorActividad.Visible = False
            Me.LblMensajeActividad.Text = "No se cuenta con ninguna tarea seleccionada"
            Me.LblMensajeActividad.ForeColor = Drawing.Color.Blue
        End If
    End Sub

    Protected Sub DdlTrabajadorActividad_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DdlTrabajadorActividad.SelectedIndexChanged

    End Sub

#End Region

    Protected Sub BtnProgramar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnProgramarPorTrabajador.Click
        If (programar(Me.GvProgramacionTrabajador, Me.LblMensaje, "cbProgramar", "txtCantidadARealizar")) Then
            llenargrid()
        End If
    End Sub

    Protected Sub BtnProgramarPorActividad_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnProgramarPorActividad.Click
        If programar(Me.GvProgramacionActividad, Me.LblMensajeActividad, "cbProgramarActividad", "txtCantidadARealizarActividad") Then
            llenargrid2()
        End If
    End Sub

   
End Class
